/*
	@baukh20140813
	系统管理列表页分页初始化
*/
define(function(){
	var page = {
		/*
			$pageJson:分页所需JSON数据
			$query:需要在触发分页后返回的参数
			$listArea:分页对应的列表区
			$callback:分页触发后刷新列表的方法
		*/
		init: function(pageJson, query, listArea, callback){
			var pagination = $(listArea).find('.pagination');
			if(!pagination || pagination.length == 0 || !pageJson || pageJson.length == 0){
				console.log('分页初始化缺失必要参数，初始化失败');
				pagination.html('');
				return false;
			}
			if(pageJson.tSize == 0){
				console.log('当前数据为空，停止初始化');
				pagination.parents('.dt-toolbar-footer').hide();
				return false;
			}	
			var toolBar = pagination.parents('.dt-toolbar-footer');
			//生成分页DOM节点
			page.generatePageDOM(pagination,pageJson);		
			//绑定点击事件
			page.bindClickEvent(pagination,query,listArea,callback);	
			//绑定设置显示条数切换事件
			page.bindSetPageSizeEvent(toolBar,query,listArea,callback);
			//重置当前页显示条数
			page.resetPSize(pageJson);
			toolBar.show();
		}
		/*
			@生成分页DOM节点
		*/
		,generatePageDOM:function(pagination,pageJson){
			var cPage = Number(pageJson.cPage),		//当前页
				tPage = Number(pageJson.tPage),		//总页数
				tHtml = '',					//临时存储分页HTML片段
				lHtml = '';					//临时存储末尾页码THML片段
			if(pageJson.showLitePage){//显示上一页,下一页
				//配置首页
				if(cPage > 1){
					tHtml += '<li cPage="1">'
						  +  '<a href="javascript:void(0);">首页</a>'
						  +  '</li>'
						  +  '<li cPage="'+(cPage-1)+'">'
						  +  '<a href="javascript:void(0);">上一页</a>'
						  +  '</li>';
				}else{
					tHtml += '<li cPage="1" class="disabled">'
						  +  '<a href="javascript:void(0);">首页</a>'
						  +  '</li>'
						  +  '<li cPage="'+(cPage-1)+'" class="disabled">'
						  +  '<a href="javascript:void(0);">上一页</a>'
						  +  '</li>';				
				}
				// 配置当前页
				tHtml += '<li class="active">'
					  +  '<a href="javascript:void(0);">'+cPage+'</a>'
					  +  '</li>';
				//配置下一页
					tHtml += '<li cPage="'+(cPage+1)+'">'
						  +  '<a href="javascript:void(0);">下一页</a>'
						  +  '</li>';
				pagination.html(tHtml);


			}else{
				//配置首页
				if(cPage > 1 && tPage > 1){
					tHtml += '<li cPage="1">'
						  +  '<a href="javascript:void(0);">首页</a>'
						  +  '</li>'
						  +  '<li cPage="'+(cPage-1)+'">'
						  +  '<a href="javascript:void(0);">上一页</a>'
						  +  '</li>';
				}else{
					tHtml += '<li cPage="1" class="disabled">'
						  +  '<a href="javascript:void(0);">首页</a>'
						  +  '</li>'
						  +  '<li cPage="'+(cPage-1)+'" class="disabled">'
						  +  '<a href="javascript:void(0);">上一页</a>'
						  +  '</li>';				
				}
				var i 	 = 1,		//循环开始数
					maxI = tPage;	//循环结束数
				//配置first端省略符
				if(cPage > 4){
					tHtml += '<li cPage="1">'
						  +  '<a href="javascript:void(0);">1</a>'
						  +  '</li>'
						  +  '<li class="disabled">'
						  +	 '<a href="javascript:void(0);">...</a>'
						  +  '</li>';
					i = cPage - 2;
				}
				//配置last端省略符
				if((tPage - cPage) > 4){
					maxI = cPage + 2;
					lHtml += '<li class="disabled">'
						  +	 '<a href="javascript:void(0);">...</a>'
						  +  '</li>'
						  +  '<li cPage="'+tPage+'">'
						  +  '<a href="javascript:void(0);">'+tPage+'</a>'
						  +  '</li>';
				}
				// 配置页码
				for(i; i<= maxI;i++){
					if(i == cPage){
						tHtml += '<li class="active">'
							  +  '<a href="javascript:void(0);">'+cPage+'</a>'
							  +  '</li>';
						continue;
					}			
					tHtml += '<li cPage="'+i+'">'
						  +  '<a href="javascript:void(0);">'+i+'</a>'
						  +  '</li>';				
				}			
				tHtml += lHtml;
				//配置下一页与尾页
				if(cPage < tPage){
					tHtml += '<li cPage="'+(cPage+1)+'">'
						  +  '<a href="javascript:void(0);">下一页</a>'
						  +  '</li>'
						  +  '<li cPage="'+tPage+'">'
						  +  '<a href="javascript:void(0);">尾页</a>'
						  +  '</li>';
				}else{
					tHtml += '<li cPage="'+(cPage+1)+'" class="disabled">'
						  +  '<a href="javascript:void(0);">下一页</a>'
						  +  '</li>'
						  +  '<li cPage="'+tPage+'" class="disabled">'
						  +  '<a href="javascript:void(0);">尾页</a>'
						  +  '</li>';
				}
				pagination.html(tHtml);


			}
		}
		/*
			@绑定分页点击事件
		*/
		,bindClickEvent:function(pagination,query,listArea,callback){
			var pageList = pagination.find('li');
			pageList.off('click');
			pageList.on('click',function(){
				var _this = $(this);
				var cPage = _this.attr('cPage');	//分页页码
				if(!cPage || !Number(cPage) || _this.hasClass('disabled')){
					console.log('指向页无法跳转,已停止。原因:1、可能是当前页已处于选中状态; 2、所指向的页不存在');
					return false;
				}
				
				//替换被更改的值
				query.cPage = cPage;
				callback(query);
			});
		}
		/*
			@绑定设置单页显示数切换事件
		*/
		,bindSetPageSizeEvent:function(toolBar,query,listArea,callback){
			var pageSizeArea = toolBar.find('select[name=pSizeArea]');
			if(!pageSizeArea || pageSizeArea.length == 0){
				console.log('未找到单页显示数切换区域，停止该事件绑定');
				return false;
			}
			pageSizeArea.unbind('change');
			pageSizeArea.change(function(){
				query.pSize = $(this).val();
				window.localStorage.setItem('pSize_'+window.location.hash,query.pSize);				
				query.cPage = 1; //@baukh20141121:由产品决定，临时由前端处理切换每页条数时默认跳转第一页
				callback(query);
			});
		}
		//重置当前页显示条数
		,resetPSize: function(paginator){
			var pSizeArea = $('select[name="pSizeArea"]'),
				pSizeInfo = $('.dataTables_info');
			if(!pSizeArea || pSizeArea.length == 0){
				console.log('未找到条数切换区域，停止该事件绑定');
				return false;
			}
			var tmpHtml = '';
			if(paginator.showLitePage){//不显示条数
				 tmpHtml = '此页显示 '
							+ (paginator.cPage == 1 ? 1 : (paginator.cPage-1) * paginator.pSize + 1)
							+ '-'
							+ paginator.cPage * paginator.pSize;
			}else{
				 tmpHtml = '此页显示 '
							+ (paginator.cPage == 1 ? 1 : (paginator.cPage-1) * paginator.pSize + 1)
							+ '-'
							+ paginator.cPage * paginator.pSize
							+ ' 共'
							+ '<span class="page-num">'
							+ paginator.tSize
							+ '</span>'
							+ '条';
			}
			pSizeArea.val(paginator.pSize || 10); //根据返回值修正单页条数显示值
			pSizeInfo.html(tmpHtml);	//修改单页条数文字信息
			pSizeArea.show();
		}
		//计算分页数据
		,generatePage:function(tSize,cPage,pSize,tPage){
			if(!cPage){
				cPage=1;
			}
			//pSize = (pSize <= 0) || (pSize>tSize) ? tSize : pSize;
			tPage = parseInt(tSize%pSize == 0 ? tSize/pSize : tSize/pSize+1);
			var p={
				cPage: cPage*1,
				pSize: pSize,
				tPage: tPage,
				tSize: tSize
			}
			return p;
		}
	}
	return page;
})
	